package _tema3;

import java.net.*;
import java.util.ArrayList;
import java.io.*;

public class Cliente {

	private Socket socket;
	private ObjectOutputStream output;
	private ObjectInputStream input;
	
	final int PORT = 7900;
	final String ADDRESS = "127.0.0.1";
	
	public void conectar() {
		try {
			this.socket = new Socket(this.ADDRESS, this.PORT);
			this.output = new ObjectOutputStream(this.socket.getOutputStream());
			this.input = new ObjectInputStream(this.socket.getInputStream());
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public void enviarConectar() {
		Mensaje m = new Mensaje();
		m.setTipo(Mensaje.CONECTAR);
		m.setDato("Cliente");
		try {
			this.output.writeObject(m);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public ArrayList<String> recibirCargos() {
		ArrayList<String> cargos = new ArrayList<String>();
		
		try {
			Mensaje m = (Mensaje)this.input.readObject();
			if (m.getTipo() == Mensaje.CONECTAR)
				cargos = (ArrayList<String>)m.getDato();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
		return cargos;
	}
	
	public void pedirPersonas(String cargo) {
		Mensaje m = new Mensaje();
		m.setTipo(Mensaje.ENVIAR);
		m.setDato(cargo);
		try {
			this.output.writeObject(m);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public ArrayList<String> recibirPersonas() {
		ArrayList<String> personas = new ArrayList<String>();
		
		try {
			Mensaje m = (Mensaje)this.input.readObject();
			if (m.getTipo() == Mensaje.ENVIAR)
				personas = (ArrayList<String>)m.getDato();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
		return personas;
	}

	public void enviarDesconectar() {
		if (socket != null) {
			if (!socket.isClosed()) {
				Mensaje m = new Mensaje();
				m.setTipo(Mensaje.DESCONECTAR);
				m.setDato(null);
				try {
					this.output.writeObject(m);
					this.socket.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
	//Main Cliente
	public static void main(String[] args) {
		new Ventana(new Cliente()).setVisible(true);
	}
}
